"""
封装 Excel 类
"""
import openpyxl
from openpyxl.worksheet.worksheet import Worksheet


class Excel():
    # 文件位置，sheet、
    def __init__(self,file_path):
        self.file_path = file_path
        # sheet_name 可以放在初始化函数，但是每次 实例 只能，打开一个表单
        #self.wb = openpyxl.load_workbook()  这样修改不成功，可能是因为初始化后，一直没有关闭，都是初始化的东西？

        # 打开表格
    def sheet(self,sheet_name) -> Worksheet:
        #   -> Worksheet   函数后面加，表示worksheet对象，后面用到sheet。有提示信息
        # 每次操作表单都重新 打开wb，就不会有问题
       wb = openpyxl.load_workbook(self.file_path)
       sheet = wb[sheet_name]
        # 拿到sheet数据后 就可以关闭
       wb.close()
       return sheet
    # 读取第一行
    def title(self,sheet):
        # 每次操作表单都重新 打开wb，都是新的数据，就不会有问题
        sheet = self.sheet(sheet)
        # 第一行
        header = sheet[1]
        # print(header)
        list=[]
        for i in header:

            list.append(i.value)
        return list

    # todo
    # 获取所有数据
    def all_data(self,sheet_name):
        # 每次操作表单都重新 打开wb，都是新的数据，就不会有问题
        sheet = self.sheet(sheet_name)
        # 因为获取的rows是生成器，需要转换成列表
        sheet_rows = list(sheet.rows)
        # print(sheet_rows)
        #
        headers = self.title(sheet_name)
        all_rows = []
        for row in sheet_rows[1:]:
            # row是每一行数据
            row_list = []
            for cell in row:
                row_list.append(cell.value)
            # print(row_list)
            # 超入到全部数据列表
            # zip, [[],[]]   一一对应，再dict转为字典
            all_rows_dict = dict(zip(headers,row_list))
            # print(all_rows_dict)
            all_rows.append( all_rows_dict)
        return all_rows
        # print(all_rows)

    # 写入操作 ，如果要写成实例方法，需要重新打开 wb，再操作
    # 静态方法则 不需要
    @staticmethod
    def write_data(file,sheet_name,row,column,data):
        # sheet方法获取不到，只能重新写
        wb = openpyxl.load_workbook(file)
        sheet = wb[sheet_name]

        sheet.cell(row,column).value = data
        # 保存并关闭
        wb.save(file)
        wb.close()

# 调试
if __name__ == '__main__':
    excel = Excel(r'E:\lemonpython\basic\test.xlsx')
    sheet = excel.sheet('register')
    header = excel.title('register')
    all = excel.all_data('register')

    write = excel.write_data(r'E:\lemonpython\basic\test.xlsx','Sheet2',1,1,'newvalue')
    # print(header)
